# coding: UTF-8
# ----------
# Project_Name : pythonProject
# File_Name : huangcongbing
# Author : asus
# Date_Time:2022/4/24 15:10
# Description :
# ----------
"""
等待机制有三种：
1.强制等待：time_sleep(时间)，没有时间上的弹性，不知道程序运行完毕没有（单位为，秒）
一般用于调试、演示。
2.隐式等待：driver.implicitly_wait(时间，单位为秒),只用设置一次，整个driver生命周期都有用
会等待整个页面的所有元素，不灵活，在js弹出菜单或者动态页面不会继续等待
3.显示等待：
3.1导入两个包:
from selenium.webdriver.support.wait import WebDiverWait 导入显示等待类
from selenium.webdiver.support import expected_conditions  导入等待条件
 生成显式等待对象，设置最大元素等待时间
    wait = WebDriverWait(driver,30)
 在具体元素操作之前加等待语句
    wait.until(expected_conditions.visibility_of_element_located((By.ID,'key'）
优点：
灵活，默认每0.5秒判断等待条件是否成立，成立继续往下执行
缺点：
代码稍微麻烦一点、

"""

from selenium import webdriver
import time
from selenium.webdriver.common.by import By

from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions


def foo1():
    driver = webdriver.Chrome()
    #生成显式等待对象，设置最大元素等待时间
    wait = WebDriverWait(driver,30)
    driver.maximize_window()

    driver.get("https://www.jd.com/")
    #加入显式等待
    wait.until(expected_conditions.visibility_of_element_located((By.ID,'key')))

    driver.find_element(By.ID, "key").send_keys("T恤")  # 输入搜索输入框
    driver.find_element(By.XPATH, '//*[@id="search"]/div/div[2]/button').click()  # 点击搜索按键
    time.sleep(2)

    driver.find_element(By.XPATH, '//*[@id="J_filter"]/div[1]/div[1]/a[2]').click()  # 点击销量
    time.sleep(2)

    # 循环打开销量前5
    for i in range(1, 6):
        driver.find_element(By.XPATH, f'//*[@id="J_goodsList"]/ul/li[{i}]/div/div[1]/a').click()

    # 切换到销量第二的产品
    handles = driver.window_handles
    for handle in handles:
        driver.switch_to.window(handle)
        if driver.current_url == "https://item.jd.com/10030434646509.html":
            break

    # 选择产品参数
    driver.find_element(By.XPATH, '//*[@id="choose-attr-1"]/div[2]/div[4]').click()  # 选款式

    for i in range(4):
        driver.find_element(By.XPATH, '//*[@id="choose-btns"]/div/div/a[2]').click()
    driver.find_element(By.XPATH, '//*[@id="choose-attr-2"]/div[2]/div[3]').click()  # 选尺码

    # 点击购物车
    driver.find_element(By.ID, 'InitCartUrl').click()
    time.sleep(2)

    # 点击账号登录
    driver.find_element(By.LINK_TEXT, '账户登录').click()
    time.sleep(1)

    # 输入账号和密码，点击登录
    driver.find_element(By.ID, 'loginname').send_keys("test")
    driver.find_element(By.ID, 'nloginpwd').send_keys('123456')
    driver.find_element(By.ID, 'loginsubmit').click()

    time.sleep(2)

    driver.quit()


if __name__ == "__main__":
    foo1()